#include<bits/stdc++.h>
using namespace std;
long long b[100010],c[100010];
long long T,n,m,s,x,csc,cxy,f,e;
struct car{
    long long d;
    long long v;
    long long a;
    long long u=0x3f3f3f3f;
}ca[100010];
 int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin >> T;
    for(long long i=0;i<T;i++){
        cin >> n >> m >> s >> x;
        csc=0;cxy=0;f=0;e=0;
        c[m]=0;
        for(long long j=0;j<n;j++){
            cin >> ca[j].d >> ca[j].v >> ca[j].a;
        }
        for(long long j=0;j<m;j++){
            cin >> b[j];
        }
        for(long long j=0;j<n;j++){
            for(long long l=0;l<m;l++){
                if(b[l]<=ca[j].u&&b[l]>=ca[j].d){
                    ca[j].u=l;
                }
            }
        }
        sort(b,b+m);
        for(long long j=0;j<n;j++){
            if(ca[j].a==0&&b[m-1]>=ca[j].d){
                if(ca[j].v>x){
                    csc++;
                    c[ca[j].u]=1;
                }
            }
            if(ca[j].a>0&&b[m-1]>=ca[j].d){
                for(int k=ca[j].u;k<m;k++){
                    if(ca[j].v+ca[j].a*(b[k]-ca[j].d)>x){
                        csc++;
                        c[k]=1;
                        k=m;
                    }
                }
            }
            if(ca[j].a<0&&b[m-1]>=ca[j].d){
                for(int k=m-1;k>=ca[j].u;k--){
                    if(ca[j].v+ca[j].a*(b[k]-ca[j].d)>x){
                        csc++;
                        c[k]=3;
                        k=-1;
                    }
                }
            }
        }
        for(int j=0;j<=m;j++){
            if(c[j]==0&&f==0){
                cxy++;
            }
            if(c[j]==1&&f==0){
                f=1;e=j;
            }
            if(c[j]==3&&f==1){
                f=0;
                cxy+=j-e;
            }
            if(j==m&&f==1){
                cxy+=j-e-1;
            }
        }
        cout << csc << " " << cxy << endl;
    }
    return 0;
}
//0 0 1 3 1 0 0 0
